package com.zhang.discount.service;

import com.zhang.discount.dto.SkuFlashSaleSearchDTO;
import com.zhang.discount.entity.FlashSaleSku;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhang.discount.entity.FlashSales;
import com.zhang.discount.to.FlashSaleSkuModel;
import com.zhang.discount.vo.FlashSaleSkuInfoVO;

import java.math.BigDecimal;
import java.util.List;

/**
 * @author 创世神
 * @since 2024-09-28 10:03:22
 */
public interface FlashSaleSkuService extends IService<FlashSaleSku> {

    Page<FlashSaleSku> findPage(SkuFlashSaleSearchDTO dto);

    List<FlashSaleSku> findList(FlashSaleSku params);

    FlashSaleSku findById(Long id);

    boolean insert(FlashSaleSku flashSaleSku);

    boolean update(FlashSaleSku flashSaleSku);

    int delete(Long id);
    /**
     * 上架一个场次的关联的sku到内存
     *
     * @param session
     */
    void upFlashSkuSession(String session);

    /**获取最近三天将要开启的秒杀场次
     * @return {@link List}<{@link FlashSales}>
     */
    List<FlashSales> getCurrentFlashSaleSession();

    /**获取一个秒杀场次中的sku列表
     * @param sessionId 秒杀场次Id
     * @return {@link List}<{@link FlashSaleSkuModel}>
     */
    List<FlashSaleSkuModel> getFlashSaleSkuModelBySessionId(String sessionId);

    /**查询指定skuId的秒杀场次信息
     * @param skuId
     * @return {@link FlashSaleSkuInfoVO}
     */
    FlashSaleSkuInfoVO getFlashSkuBySkuId(String skuId);

    BigDecimal buyFlashSaleSku(String skuId, Integer buyNumber, String skuToken);
}
